14-2 YB滮?

MATLAB 的關係運算元(Relational Operators)有下列六種:

關係運算元說明
== 等於
~= 不等於
< 小於
<= 小於或等於
> 大於
>= 大於或等於

MATLAB 的關係運算元總是以矩陣內元素對元素的方式作運算,例如:

Example 1: 14-MATLAB的運算元/greaterThan01.ma = [1 2; 3 4]; b = [1 3; 2 4]; c = a>b c = 0 0 1 0

由上例可知,若 a(i, j) > b(i, j),則 c(i, j) 的值為 1(表示「真」或「成立」),否則即為 0(表示「偽」或「不成立」)。MATLAB 的關係運算元亦支援純量展開,例如:

Example 2: 14-MATLAB的運算元/greaterThan02.ma = [1 2; 3 4]; c = a>2 c = 0 0 1 1

此外,我們可以將關係運算元傳回的 0-1 矩陣(元素值為 0 或 1)來進行矩陣的索引(Indexing),並進而找出滿足某條件的矩陣元素,例如,欲求出在 a 矩陣中,滿足 a(i, j) >= b(i, j) 的元素,可輸入如下:

Example 3: 14-MATLAB的運算元/findElement01.ma = [10 20; 30 40]; b = [10 30; 20 40]; c = a>=b; d = a(c) d = 10 30 40

在上例中,亦可直接使用 a(a >= b) 來求得答案。此外,在上例中,矩陣 C 是一個由邏輯運算(見下節)所產生的邏輯索引矩陣,因此可直接用於 a 的邏輯索引(Logic Indexing)。一般而言,若要進行邏輯索引,最好先將索引矩陣經過 logical 指令的處理,以免產生疑義。以上例而言,a([0,1;1,0]) 會產生錯誤訊息,正確寫法應該是 a(logical([0,1;1,0]))。

另一個常用來尋找矩陣元素的指令是 find,可傳回非零元素索引,例如:

Example 4: 14-MATLAB的運算元/find01.mx = [0 1 2; 0 0 3]; index = find(x) index = 3 5 6

在上例中,index 代表 x 的一維索引或下標,可詳見本書第九章「矩陣的處理和運算」的第一節「矩陣索引或下標」,而 x(index) 則是非零元素所形成的向量。若要找出滿足某條件的二維索引或下標,可輸入如下:

Example 5: 14-MATLAB的運算元/find02.mx = magic(3); [idx1, idx2] = find(x>5) idx1 = 1 3 1 2 idx2 = 1 2 3 3

在上例中,idx1 和 idx2 分別是符合條件之矩陣元素的列索引(Row Index)及行索列(Column Index)。因此,若善於利用 find 指令,可以很快地找出符合某條件式的元素。例如:欲求出介於 7 和 11 的元素,可輸入如下:

Example 6: 14-MATLAB的運算元/find03.mx = magic(5); x(find(7<x & x<11)) ans = 10 8 9

其中 & 代表邏輯的 AND,將在下節介紹。


MATLAB程式設計:入門篇